iT邦幫忙

DAY 10
0

Ruby on Rails 實戰聖經 - 初心者的30天學習記錄系列 第 10

Ruby on Rails實戰聖經 (10) - 利用局部樣板及before_filter整理程式碼

  • 分享至 

  • xImage
  •  

局部樣板(Partial Template)

利用局部樣板(Partial)機制,我們可以將重複的樣板獨立出一個單獨的檔案,來讓其他樣板共享引用。
例如new.html.erb和edit.html.erb都有以下相同的樣板程式:

<%= f.label :title, "Title" %>
<%= f.text_field :title %>
<%= f.label :description, "Description" %>
<%= f.text_area :description %>

我們就可以利用Partial將這段程式碼獨立成一個檔案,讓其他樣板引用,這樣如果我們需要修改欄位,就只需要修改這個檔案,增加程式的可維護性。

試想,如果一段相同程式碼重複在多個檔案中重複出現,遇到要修改時還要一個一個修改,這不是一件很笨的事嗎?

局部樣板的命名都是底線_開頭,新增一個檔案叫做_form.html.erb,內容就如上。

如此new.html.erb就可以修改成:

<%= form_for @guest, :url => {:controller => 'guests', :action => 'create' } do |f| %>
<%= render :partial => 'form', :locals => { :f => f } %>
<%= f.submit "Create" %>
<% end %>

而edit.html.erb則修改為:

<%= form_for @guest, :url => {:controller => 'guests', :action =>'update', :id => @guest} do |e| %>
<%= render :partial => 'form', :locals => { :f => e } %>
<%= e.submit "確認修改" %>
<% end %>

利用before_filter將controller中重複的程式獨立出來

觀察guests_controller.rb,可以發現在show、edit、update、destroy這四個action中,我們都重複撰寫了一行程式碼來找到選定的那筆資料:

@guest = Guest.find(params[:id])

利用before_filter方法,就可以將它獨立出來,在guests_controller.rb最上方新增一行方法:

before_filter :find_guest, :only => [:show, :edit, :update, :destroy]

並在最下方新增一函式

protected
def find_guest
@guest = Guest.find(params[:id])
end

最後將show、edit、update、destroy中那行重複的程式碼刪除即可。

* Controller中的公開(public)方法都是Action,也就是可以讓瀏覽器呼叫使用的動作。使用protected或private可以避免內部方法被當做Action使用。---實戰聖經


上一篇
Ruby on Rails實戰聖經 (09) - 版型 (Layout)
下一篇
Ruby on Rails實戰聖經 (11) - 利用Bootstrap做前端套版
系列文
Ruby on Rails 實戰聖經 - 初心者的30天學習記錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言